package net.spunofbook.modelo;

import java.util.ArrayList;
import java.util.List;
import net.spunofbook.negocio.Cliente;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class ClienteRepositorio {

	private SQLiteDatabase queryCliente;
	private String[] colunas = new String[] {"_idCliente", "nome", "cpf", "endereco", "telefone", "ativo"};

	// Falta fazer apenas a funcao de busca simples

	public ClienteRepositorio(Context context) {
		BancoSqlLiteConection auxBd = new BancoSqlLiteConection(context);
		queryCliente = auxBd.getWritableDatabase();
	}

	public List<Cliente> buscarTodosOsClientes() {
		List<Cliente> clientes = new ArrayList<Cliente>();
		Cursor cursor = queryCliente.query("cliente", colunas, null, null,
				null, null, "nome ASC");

		if (cursor.getCount() > 0) {
			cursor.moveToFirst();

			do {

				Cliente cliente = new Cliente();
				cliente.setId(cursor.getInt(0));
				cliente.setNome(cursor.getString(1));
				cliente.setCpf(cursor.getString(2));
				cliente.setEndereco(cursor.getString(3));
				cliente.setTelefone(cursor.getString(4));
				cliente.setAtivo(cursor.getString(5));
				clientes.add(cliente);

			} while (cursor.moveToNext());
		}
		return clientes;
	}

	/**
	 * 
	 * Essa função é a mesma da de cima, a diferença que ela filtra pelo o texto
	 * inserido na busca.
	 * */
	public List<Cliente> buscarPorNome(String nome) {
		List<Cliente> clientes = new ArrayList<Cliente>();
		String condicao = "nome like %" + nome + "%";
		Cursor cursor = queryCliente.query("cliente", colunas, condicao, null,
				null, null, "nome ASC");

		if (cursor.getCount() > 0) {
			cursor.moveToFirst();
			do {
				Cliente cliente = new Cliente();
				cliente.setId(cursor.getInt(0));
				cliente.setNome(cursor.getString(1));
				cliente.setCpf(cursor.getString(2));
				cliente.setEndereco(cursor.getString(3));
				cliente.setTelefone(cursor.getString(4));
				cliente.setAtivo(cursor.getString(5));
				clientes.add(cliente);
			} while (cursor.moveToNext());
		}
		return clientes;
	}

	public Cliente buscarPorId(int id) {
		String condicao = "_idCliente = " + id;
		Cursor cursor = queryCliente.query("cliente", colunas, condicao, null, null, null, "nome ASC");
		Cliente cliente = new Cliente();
		cliente.setId(cursor.getInt(0));
		cliente.setNome(cursor.getString(1));
		cliente.setCpf(cursor.getString(2));
		cliente.setEndereco(cursor.getString(3));
		cliente.setTelefone(cursor.getString(4));
		cliente.setAtivo(cursor.getString(5));
		return cliente;
	}

	public void inserir(Cliente cliente) {
		ContentValues valores = new ContentValues();
		valores.put("nome", cliente.getNome().toString());
		valores.put("cpf", cliente.getCpf().toString());
		valores.put("endereco", cliente.getEndereco().toString());
		valores.put("telefone", cliente.getTelefone().toString());
		valores.put("ativo", "sim");

		queryCliente.insert("cliente", null, valores);
	}

	public void atualizar(Cliente cliente) {
		ContentValues valores = new ContentValues();
		valores.put("nome", cliente.getNome().toString());
		valores.put("cpf", cliente.getCpf().toString());
		valores.put("endereco", cliente.getEndereco().toString());
		valores.put("telefone", cliente.getTelefone().toString());

		String id = Integer.toString(cliente.getId());

		// queryCliente.update("cliente", valores, "_idCliente = ?", new
		// String[] { "" + cliente.getId() });
		queryCliente.update("cliente", valores, "_idCliente = ?",
				new String[] { id });
	}

	public void deletar(Cliente cliente) {
		queryCliente.delete("cliente", "_idCliente = " + cliente.getId(), null);
	}

}
